﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Linq;
using System.Data.SqlClient;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Transactions;
using BS_Gimnasio.General;
using DS_Gimnasio;
using System.Configuration;
using System.IO;
using System.Net.Mail;
using System.Net.Mime;
using System.Net;

namespace BS_Gimnasio.Logistica
{
    [DataContract()]
    public class cls_Contro_Alertas : cls_Base
    {
        #region Variables

        private int _errorCode;
        private string _errorMensaje;
        private DataTable _lista;

        #endregion
        #region Propiedades
        [DataMember]
        public int ErrorCode
        {
            get { return _errorCode; }
            set { _errorCode = value; }
        }
        [DataMember]
        public string ErrorMensaje
        {
            get { return _errorMensaje; }
            set { _errorMensaje = value; }
        }
        [DataMember]
        public DataTable Lista
        {
            get { return _lista; }
            set { _lista = value; }
        }
        #endregion
        #region Metodos Heredados

        public override void InsertarActualizarRegistro(bool tipoOperacion, ref string mensajeError)
        {
            throw new NotImplementedException();
        }

        private void InsertarRegistro(ref string mensajeError)
        {
            throw new NotImplementedException();
        }

        private void ActualizarRegistro(ref string mensajeError)
        {
            throw new NotImplementedException();
        }

        public override cls_Base TraerObjeto()
        {
            throw new NotImplementedException();
        }


        public override bool EliminarRegistro(ref string mensajeError)
        {
            throw new NotImplementedException();
        }

        public override DataTable Listar(int opcion)
        {
            try
            {
                DataTable dt = new DataTable();

                using (dtacls_GimnasioDataContext db = new dtacls_GimnasioDataContext())
                {
                    if (opcion == 1)
                    {
                        ISingleResult<SP_Seleccionar_Todo_Bitacora_AlertasResult> resultado = db.SP_Seleccionar_Todo_Bitacora_Alertas(IdUsuarioInicioSeccion);

                        dt = cls_Adaptador.ToDataTable(resultado.ToList());
                    }
                    if (opcion == 2)
                    {
                        ISingleResult<SP_Seleccionar_Todo_Bitacora_Alertas_HoyResult> resultado = db.SP_Seleccionar_Todo_Bitacora_Alertas_Hoy(IdUsuarioInicioSeccion);

                        dt = cls_Adaptador.ToDataTable(resultado.ToList());
                    }
                    if (opcion == 3)
                    {
                        ISingleResult<SP_Seleccionar_Empleados_ProveduriaResult> resultado = db.SP_Seleccionar_Empleados_Proveduria(_idUsuarioInicioSeccion);

                        dt = cls_Adaptador.ToDataTable(resultado.ToList());
                    }
                    return dt;
                }
            }

            catch (SqlException ex)
            {
                NumeroError = ex.ErrorCode;
                MensajeError = ex.Message;

                return null;
            }

            catch (Exception e)
            {
                MensajeError = e.Message;

                return null;
            }
        }

        public override void OtrosProcesos(int opcion, ref object resultado)
        {
            switch (opcion)
            {
                case 1:
                    resultado = this.EmailInformeStock();
                    break;
                default:
                    break;
            }
        }

        #endregion
        #region Metodos Propios
        private DataTable ConsultarListaTI()
        {
            try
            {
                DataTable dt = new DataTable();

                using (dtacls_GimnasioDataContext db = new dtacls_GimnasioDataContext())
                {

                    ISingleResult<SP_Seleccionar_Empleados_TIResult> resultado = db.SP_Seleccionar_Empleados_TI(_idUsuarioInicioSeccion);

                    dt = cls_Adaptador.ToDataTable(resultado.ToList());

                    return dt;
                }
            }

            catch (SqlException ex)
            {
                _errorCode = ex.ErrorCode;
                _errorMensaje = ex.Message;

                return null;
            }

            catch (Exception e)
            {
                _errorMensaje = e.Message;

                return null;
            }
        }
        private string EmailInformeStock()
        {
            try
            {
                DataTable dtListaProveduria = _lista;

                foreach (DataRow row in dtListaProveduria.Rows)
                {
                    Attachment _item = new Attachment("C:\\temp\\alertas.xls", MediaTypeNames.Application.Octet);
                    ContentDisposition disposition = _item.ContentDisposition;

                    cls_EnviarCorreos enviarCorreo = new cls_EnviarCorreos()
                    {
                        Destinatario = row[2].ToString(),
                        Asunto = "Reporte Productos: (" + DateTime.Now.ToString("dd / MMM / yyy") + ")",

                        Mensaje = "Señor(a) " + row[1].ToString() + "con el numero de cedula: " + row[0].ToString() +
                                     ", <br><br> Se informa que estos son los productos, tienen insuficentes existencias.<br>" +
                                     "Este mensaje solo es informacion.\nPor no responder este correo. <b>" + "</b><br><br><br><br> Muchas Gracias<br>Dudas presentarse a las oficinas centrales.",

                        Archivo = _item,
                        HTML = true,
                    };
                    enviarCorreo.envioCorreoElectronico(IdUsuarioInicioSeccion, ref Filtros[0]);
                    
                }
                return Filtros[0];
            }
            catch (Exception e)
            {
                MensajeError = e.Message; return e.Message;
            }
        }
        
        private void EmailInformeTI()
        {
            DataTable dtListaTI = ConsultarListaTI();

            foreach (DataRow row in dtListaTI.Rows)
            {
                cls_EnviarCorreos enviarCorreo = new cls_EnviarCorreos()
                
{
                    Destinatario = row[2].ToString(),
                    Asunto = "Informe Falla: (" + DateTime.Now.ToString("dd / MMM / yyy") + ")",

                    Mensaje = "Señor(a) " + row[1].ToString() + "con el numero de cedula: " + row[0].ToString() +
                                 ", <br><br>Corregir estos errores: " + string.Format("{0} <br>", _errorMensaje) +
                                 "Este mensaje solo es informacion.\nPor no responder este correo. <b>" + "</b><br><br><br><br> Muchas Gracias<br>Dudas presentarse a las oficinas centrales.",

                    HTML = true,
                };
                enviarCorreo.envioCorreoElectronico(IdUsuarioInicioSeccion, ref Filtros[0]);
            }
        }
        #endregion
    }
}
